const db = require('../db/index.js')
//导入加密中间件
const bcrypt=require('bcryptjs')
//导入jwt，用于生成token
const jwt=require('jsonwebtoken')
//导入jwt配置文件，用于加密和解密
const jwtconfig=require('../jwt_config/index.js')


exports.register = (req, res) => {
	//res.send('我耀注册啦')
	//req是前端传过来的数据，也就是request，res是返回给前端的数据，也就是result
	const reginfo = req.body
	//第一步判断前端传过来的数据是否为空
	if (!reginfo.account || !reginfo.password) {
		return res.send({
			status:1,
			message:'账号或密码不能为空',

		})
	}
	//第二步 判断前端传过来的账号在数据表中是否存在
	const sql='select * from users where account=?'
	db.query(sql,reginfo.account,(err,results)=>{
		if(results.length>0){
			return res.send({
				status:1,
				message:'账号已经存在',			
			})
		}
		//第三步，对密码进行加密
		//需要使用加密中间件bcrypt.js
		reginfo.password=bcrypt.hashSync(reginfo.password,10)
		//第四步，把账号和密码插入到users表中
		const sql1='insert into users set ?'
		//注册身份
		const identity='用户'
		//创建时间
		const create_time=new Date()
		db.query(sql1,{
			account:reginfo.account,
			password:reginfo.password,
			identity,
			create_time,
			status:0,
			
		},(err,results)=>{
			//第一个插入失败   affectedRows影响的行数
			if(results.affectedRows !==1){
				return res.send({
					status:1,
					message:'注册账号失败',			
				})
			}
			res.send({
				status:1,
				message:'注册成功',			
			})
		})
		
	})
}

exports.login = (req, res) => {
	//res.send('我登录啦')
	const loginfo=req.body
	//第一步，查看数据表中有没有前端传过来的账号
	const sql='select * from users where account=?'
	db.query(sql,loginfo.account,(err,results)=>{
		if(err) return res.cc(err)
		if(results.length!==1) return res.cc('登录失败')
		
		//对前端传过来的密码进行解密
		const compareResult=bcrypt.compareSync(loginfo.password,results[0].password)
		if(!compareResult){
			return res.cc('登录失败')
		}
		//对账号是否冻结进行判断
		if(results[0].status==1){
			return res.cc('账号已经被冻结了，不能使用')
		}
		//第四步，生成返回给前端的token
		//剔除加密后的密码，头像，创建时间，更新时间
		const user={
			...results[0],
			password:'',
			imageUrl:'',
			create_time:'',
			update_time:'',			
		}
		//设置token的有效时长,有效期为7小时
		const  tokenStr=jwt.sign(user,jwtconfig.jwtSecretKey,{
			expiresIn:'7h'
		})
		res.send({
			results:results[0],
			status:0,
			message:'登录成功',
			token:'Bearer '+tokenStr,
		})
	})
}